package com.gxc.number;

import java.util.Scanner;

/**
 * 小明玩一个游戏。
 *
 * 系统发1+n张牌，每张牌上有一个整数。
 *
 * 第一张给小明，后n张按照发牌顺序排成连续的一行。
 *
 * 需要小明判断，后n张牌中，是否存在连续的若干张牌，其和可以整除小明手中牌上的数字。
 *
 * 输入描述
 * 输入数据有多组，每组输入数据有两行，输入到文件结尾结束。
 *
 * 第一行有两个整数n和m，空格隔开。m代表发给小明牌上的数字。
 *
 * 第二行有n个数，代表后续发的n张牌上的数字，以空格隔开。
 *
 * 备注
 * 1 ≤ n ≤ 1000
 * 1 ≤ 牌上的整数 ≤ 400000
 * 输入的组数，不多于1000
 * 用例确保输入都正确，不需要考虑非法情况。
 * 输出描述
 * 对每组输入，如果存在满足条件的连续若干张牌，则输出1;否则，输出0
 */
public class CumulativeSum1 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextLine()) {
            // 读取输入的n和m，n代表牌的数量，m代表小明手中牌上的数字
            String[] input = scanner.nextLine().split(" ");
            int n = Integer.parseInt(input[0]);
            int m = Integer.parseInt(input[1]);

            // 读取后续发的n张牌的数字
            int[] cardNumbers = new int[n];
            String[] numStrings = scanner.nextLine().split(" ");
            for (int i = 0; i < n; i++) {
                cardNumbers[i] = Integer.parseInt(numStrings[i]);
            }

            // 使用boolean数组来记录余数的出现情况
            boolean[] remainderExists = new boolean[m];
            int sum = 0;
            boolean found = false;
            for (int i = 0; i < n; i++) {
                sum += cardNumbers[i];
                int k = sum % m;
                if (remainderExists[k]) {
                    found = true;
                    break;
                } else {
                    remainderExists[k] = true;
                }
            }
            System.out.println(found ? 1: 0);
        }
        scanner.close();
    }
}
